
<html><HEAD>
<LINK REL=STYLESHEET HREF="default.css" TYPE="text/css">
<TITLE>
Creating accessible software applications with PowerBuilder</TITLE>
</HEAD>
<BODY>

<!-- Header -->
<p class="ancestor" align="right"><A HREF="apptechp215.htm">Previous</A>&nbsp;&nbsp;<A HREF="apptechp217.htm" >Next</A>
<!-- End Header -->
<A NAME="CEGBAEHH"></A><h1>Creating accessible software applications with PowerBuilder</h1>
<A NAME="TI6134"></A><h4>MSAA standard</h4>
<A NAME="TI6135"></A><p>PowerBuilder provides the infrastructure and properties needed
to build accessibility features into your Windows and Web applications.
Its features allow applications to conform generally to Microsoft
Active Accessibility (MSAA) Version
2. MSAA is a Windows standard that defines the way accessibility
aids obtain information about user interface elements and the way programs
expose information to the aids. </p>
<A NAME="TI6136"></A><p>PowerBuilder standard controls support all required Microsoft
Active Accessibility properties as
listed in the following table:</p>
<A NAME="TI6137"></A><table cellspacing=0 cellpadding=6 border=1 frame="void" rules="all"><caption>Table 32-1: MSAA properties and PowerBuilder support</caption>
<tr><th  rowspan="1"  ><A NAME="TI6138"></A>Microsoft Active Accessibility
property</th>
<th  rowspan="1"  ><A NAME="TI6139"></A>PowerBuilder property support</th>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6140"></A>Name</td>
<td  rowspan="1"  ><A NAME="TI6141"></A>objectname.AccessibleName<A NAME="TI6142"></A><p>Some controls support the Name setting through the Text or
Title property. For all controls, Name is customizable through the
AccessibleName property.</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6143"></A>Role</td>
<td  rowspan="1"  ><A NAME="TI6144"></A>objectname.AccessibleRole<A NAME="TI6145"></A><p>Customizable through the AccessibleRole property.</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6146"></A>State</td>
<td  rowspan="1"  ><A NAME="TI6147"></A>Default Active Accessibility support</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6148"></A>Location</td>
<td  rowspan="1"  ><A NAME="TI6149"></A>Default Active Accessibility support</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6150"></A>Parent</td>
<td  rowspan="1"  ><A NAME="TI6151"></A>Default Active Accessibility support</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6152"></A>ChildCount</td>
<td  rowspan="1"  ><A NAME="TI6153"></A>Default Active Accessibility support</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6154"></A>Keyboard Shortcut</td>
<td  rowspan="1"  ><A NAME="TI6155"></A>Default Active Accessibility support
for "&amp;" access key of the Text property<A NAME="TI6156"></A><p>Also, PowerBuilder Accelerator property setting if applicable
to the control.</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6157"></A>DefaultAction</td>
<td  rowspan="1"  ><A NAME="TI6158"></A>Default Active Accessibility support <A NAME="TI6159"></A><p>(For example, a selected check box has a default action of
uncheck.)</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6160"></A>Value</td>
<td  rowspan="1"  ><A NAME="TI6161"></A>Default Active Accessibility support<A NAME="TI6162"></A><p>(For example, a selected check box has the value checked.)</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6163"></A>Children</td>
<td  rowspan="1"  ><A NAME="TI6164"></A>Default Active Accessibility support<A NAME="TI6165"></A><p>(For example, items in a list box.)</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6166"></A>Focus</td>
<td  rowspan="1"  ><A NAME="TI6167"></A>Default Active Accessibility support</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6168"></A>Selection</td>
<td  rowspan="1"  ><A NAME="TI6169"></A>Default Active Accessibility support</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6170"></A>Description</td>
<td  rowspan="1"  ><A NAME="TI6171"></A>objectname.AccessibleDescription <A NAME="TI6172"></A><p>Customizable through the AccessibleDescription property.</p></td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6173"></A>Help</td>
<td  rowspan="1"  ><A NAME="TI6174"></A>Not supported</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6175"></A>HelpTopic</td>
<td  rowspan="1"  ><A NAME="TI6176"></A>Not supported</td>
</tr>
</table>
<A NAME="TI6177"></A><h4>Visual controls</h4>
<A NAME="TI6178"></A><p>For PowerBuilder
visual controls that inherit from DragObject, you can manipulate
the IAccessible Name, Role, and Description properties of each control
by using PowerBuilder dot notation or the Other page in the Properties view
of the painters. You can also manipulate the IAccessible property KeyboardShortcut
using PowerBuilder properties wherever the ampersand in text property
and accelerator property are supported. Other IAccessible properties
are set automatically using Active Accessibility default support. (For
example, location is automatically updated with absolute screen coordinates
for Windows controls at runtime.)</p>
<A NAME="TI6179"></A><p>The following table lists PowerBuilder visual controls that
inherit from DragObject and their default accessible roles:</p>
<A NAME="TI6180"></A><table cellspacing=0 cellpadding=6 border=1 frame="void" rules="all"><caption>Table 32-2: PowerBuilder visual controls and their default roles</caption>
<tr><th  rowspan="1"  ><A NAME="TI6181"></A>PowerBuilder visual controls</th>
<th  rowspan="1"  ><A NAME="TI6182"></A>AccessibleRole enumerated
value</th>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6183"></A>Animation</td>
<td  rowspan="1"  ><A NAME="TI6184"></A>animationrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6185"></A>CheckBox</td>
<td  rowspan="1"  ><A NAME="TI6186"></A>checkbuttonrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6187"></A>CommandButton</td>
<td  rowspan="1"  ><A NAME="TI6188"></A>pushbuttonrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6189"></A>DataWindow</td>
<td  rowspan="1"  ><A NAME="TI6190"></A>clientrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6191"></A>DropDownListBox    </td>
<td  rowspan="1"  ><A NAME="TI6192"></A>comboboxrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6193"></A>DropDownPictureListBox</td>
<td  rowspan="1"  ><A NAME="TI6194"></A>comboboxrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6195"></A>EditMask</td>
<td  rowspan="1"  ><A NAME="TI6196"></A>textrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6197"></A>Graph</td>
<td  rowspan="1"  ><A NAME="TI6198"></A>diagramrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6199"></A>GroupBox            </td>
<td  rowspan="1"  ><A NAME="TI6200"></A>groupingrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6201"></A>HProgressBar, VProgressBar    </td>
<td  rowspan="1"  ><A NAME="TI6202"></A>progressbarrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6203"></A>HScrollBar, VScrollBar    </td>
<td  rowspan="1"  ><A NAME="TI6204"></A>scrollbarrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6205"></A>HTrackBar, VTrackBar    </td>
<td  rowspan="1"  ><A NAME="TI6206"></A>sliderrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6207"></A>ListBox</td>
<td  rowspan="1"  ><A NAME="TI6208"></A>listrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6209"></A>ListView</td>
<td  rowspan="1"  ><A NAME="TI6210"></A>listrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6211"></A>MonthCalendar</td>
<td  rowspan="1"  ><A NAME="TI6212"></A>clientrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6213"></A>MultiLineEdit</td>
<td  rowspan="1"  ><A NAME="TI6214"></A>textrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6215"></A>Picture</td>
<td  rowspan="1"  ><A NAME="TI6216"></A>graphicrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6217"></A>PictureButton</td>
<td  rowspan="1"  ><A NAME="TI6218"></A>pushbuttonrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6219"></A>PictureHyperLink</td>
<td  rowspan="1"  ><A NAME="TI6220"></A>linkrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6221"></A>PictureListBox</td>
<td  rowspan="1"  ><A NAME="TI6222"></A>listrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6223"></A>RadioButton</td>
<td  rowspan="1"  ><A NAME="TI6224"></A>radiobuttonrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6225"></A>RichTextEdit            </td>
<td  rowspan="1"  ><A NAME="TI6226"></A>clientrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6227"></A>SingleLineEdit            </td>
<td  rowspan="1"  ><A NAME="TI6228"></A>textrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6229"></A>StaticHyperLink</td>
<td  rowspan="1"  ><A NAME="TI6230"></A>linkrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6231"></A>StaticText            </td>
<td  rowspan="1"  ><A NAME="TI6232"></A>statictextrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6233"></A>Tab control            </td>
<td  rowspan="1"  ><A NAME="TI6234"></A>clientrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6235"></A>Tab page</td>
<td  rowspan="1"  ><A NAME="TI6236"></A>clientrole!</td>
</tr>
<tr><td  rowspan="1"  ><A NAME="TI6237"></A>TreeView</td>
<td  rowspan="1"  ><A NAME="TI6238"></A>outlinerole!</td>
</tr>
</table>
<A NAME="TI6239"></A><p>The OLEControl control is set to pushbuttonrole! by default.
You need to set this role depending on content.</p>
<A NAME="TI6240"></A><h4>DataWindow control</h4>
<A NAME="TI6241"></A><p>PowerBuilder implements the MSAA standard for the DataWindow
custom control and its children.</p>
<A NAME="TI6242"></A><p>The AccessibleName and AccessibleDescription properties take
string values. The AccessibleRole property takes the value of the
AccessibleRole enumerated variable.</p>
<A NAME="TI6243"></A><p>There are some limitations regarding accessibility support in the DataWindow:<A NAME="TI6244"></A>
<ul>
<li class=fi>For the navigation function <b>accNavigate</b>,
spatial navigation (navigation by keyboard based on screen location)
is not supported. Logical navigation, where keyboard navigation
follows a logical tab sequence, is supported only for columns in
the detail band. Columns that have a tab value set to 0 so that
users cannot update them cannot be accessed from the keyboard.</li>
<li class=ds>The Composite, Label, N-Up, OLE 2.0, and RichText
DataWindow styles are not supported.</li>
<li class=ds>Support for OLE objects, OLE database columns, and
nested reports in DataWindows is limited.
</li>
</ul>
</p>
<A NAME="TI6245"></A><p>PowerBuilder cannot provide accessibility for control content.
This must be provided by the control vendor.</p>
<A NAME="TI6246"></A><h4>Examples</h4>
<A NAME="TI6247"></A><p>The following statements set the IAccessible properties for
a command button in a Window:<p><PRE> cb_1.accessiblename = "Delete"<br>cb_1.accessibledescription = "Deletes selected text"<br>cb_1.accessiblerole = pushbuttonrole!</PRE></p>
<A NAME="TI6248"></A><p>The following statement sets the AccessibleName property of
a button in a DataWindow object:<p><PRE> dw_1.Object.b_1.accessiblename = "Update"</PRE></p>
<A NAME="TI6249"></A><p>The following statements set the AccessibleRole property for
a button in a DataWindow object to 43 (the number associated with
PushButtonRole!) and return the property to a string variable:<p><PRE> string ls_data<br> <br>dw_1.Object.b_1.AccessibleRole = 43<br>ls_data = dw_1.Describe("b_1.AccessibleRole")</PRE></p>
<A NAME="TI6250"></A><h4>Deployment</h4>
<A NAME="TI6251"></A><p>When you deploy an accessible application, you must deploy
the <i>pbacc115.dll </i>file.</p>
<A NAME="TI6252"></A><h4>For more information</h4>
<A NAME="TI6253"></A><p>For more information, see the Microsoft <A HREF="http://www.microsoft.com/enable">general accessibility Web site</A>
. Also helpful is the <A HREF="http://www.webaim.org">WebAim Web site</A>
.</p>

